package com.tjn.string_;

/**
 * @author 陶镓妮
 * @version 1.0
 */
public class String03 {
    public static void main(String[] args) {
        //测试1
        String s1 = "hello";
        s1 = "haha";
        //以上两句代码创建了两个对象，一个hello，一个haha，都在常量池中
        //一开始s1指向的是hello，然后s1指向了haha，但是并不是用haha覆盖hello，而是新创建了一个对象haha

        //测试2
        String a = "hi" + "world";
        //这句代码只创建了一个对象，因为编译时会优化，自动就优化成了hiworld

        //测试3
        String b = "want";
        String c = "eat";
        String d = b + c;
        //这句代码创建了三个对象，一个want，一个eat，一个wanteat
        //但是d指向的是堆中空间地址，然后里面的value属性指向wanteat
        //而b和c是直接指向常量池中的地址
        //底层是 StringBuilder sb=new StringBuilder(); sb.append(a);sb.append(b);
        // sb是在堆中，并且append是在原来字符串的基础上追加的.
        //总结： String c1 =“ab"+“cd";常量相加，看的是池。 String c1 =a+b:变量相加,是在堆中
    }
}
